﻿namespace MicroCloud.Entity
{
    /// <summary>
    /// 实体注册器
    /// </summary>
    public interface IEntityRegister
    {
        /// <summary>
        /// 获取 是否启用
        /// <para>默认 true，设定为 false 后需另外自行实现，如继承现有实体后重写操作。</para>
        /// </summary>
        bool Enabled { get; }
        
        /// <summary>
        /// 获取 所属的数据上下文类型
        /// <para>使用指定类型的数据上下文类型。</para>
        /// </summary>
        Type DbContextType { get; }
        
        /// <summary>
        /// 获取 实体类型
        /// </summary>
        Type EntityType { get; }
        
        /// <summary>
        /// 获取 实体名称
        /// </summary>
        string EntityName { get; }

        /// <summary>
        /// 获取 实体类型所属的数据上下文类型
        /// </summary>
        Type DbContextTypeForEntity { get; }
        
        /// <summary>
        /// 获取 数据上下文配置信息
        /// </summary>
        DbContextOption DbContextOptions { get; }

        /// <summary>
        /// 将当前实体类映射对象注册到数据上下文模型构建器中
        /// </summary>
        /// <param name="modelBuilder">上下文模型构建器</param>
        void RegisterTo(ModelBuilder modelBuilder);

    }
}